#include "ItemBag.h"
#include "ItemManager.h"


ItemBag::ItemBag()
{
	
}


ItemBag::~ItemBag()
{
	
}


fvoid		ItemBag::Release()
{
	for ( fint32 i = 0 ; i < MAX_ITEM ; ++i )
	{
		mItems[ i ].Release();
	}
}


Item&		ItemBag::GetEquip( fint32 i )
{
	return mEquips[ i ];
}


Item&		ItemBag::GetItem( fint32 i )
{
	return mItems[ i ];
}


fvoid		ItemBag::SwitchItem( fint32 i1 , fint32 i2 )
{
	Item temp = mItems[ i1 ];
	mItems[ i1 ] = mItems[ i2 ];
	mItems[ i2 ] = temp;
}


fvoid		ItemBag::SwitchEquip( fint32 i1 , fint32 i2 )
{
	Item temp = mEquips[ i1 ];
	mEquips[ i1 ] = mEquips[ i2 ];
	mEquips[ i2 ] = temp;
}


fvoid		ItemBag::EquipItem( fint32 i1 , fint32 i2 )
{
	Item temp = mItems[ i1 ];
	mItems[ i1 ] = mEquips[ i2 ];
	mEquips[ i2 ] = temp;
}


fvoid		ItemBag::DropEquip( fint32 i1 , fint32 i2 )
{
	mItems[ i2 ] = mEquips[ i1 ];
	mEquips[ i1 ].Release();
}


fint32		ItemBag::AddItem( fint32 id , fint32 num /* = 1 */ )
{
	ItemData* data = gItemManager->GetItemData( id );

	if ( !data )
	{
		return INVALID_ID;
	}

	fint32 index = INVALID_ID;

	for ( fint32 i = 0 ; i < MAX_ITEM ; i++ )
	{
		if ( mItems[ i ].GetData() )
		{
			if ( mItems[ i ].GetID() == id && mItems[ i ].GetNum() + num <= gItemManager->ItemCount[ data->Type ] )
			{
				mItems[ i ].Add( num );
				return i;
			}
		}
		else if ( index == INVALID_ID )
		{
			index = i;
		}
	}

	if ( index != INVALID_ID )
	{
		mItems[ index ].Init( id , num );

		return index;
	}

	return INVALID_ID;
}


